﻿using System;
using System.Collections.Generic;
using System.Text;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using BussinessLogicTecnoPez.Tipos_Comunes;
using DataAccessTecnoPez;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

namespace BussinessLogicTecnoPez.Produccion.Compras
{
    [Serializable]
    [DBTable("PEDIDOSPROVEEDOR")]
    public class PedidoProveedor : EntityBase<PedidoProveedor>
    {
        private int idPedidoProveedor;
        private Empleado objEmpleado;
        private DateTime fecha;
        private decimal monto;
        private TipoMoneda objTipoMoneda;
        private TipoEstadoPedidoProveedor objTipoEstado;
        private Proveedor objProveedor;

        private DetallePedidoProveedor objDetallePedidoProveedor;

        [FriendlyName("Código",true)]
        [DBField("IDPEDIDOPROVEEDOR",true,true)]
        public int IdPedidoProveedor
        {
            get { return idPedidoProveedor; }
            set { idPedidoProveedor = value; }
        }

        [NotNullValidator(MessageTemplate = "Proveedor: debe tener algún valor.")]
        [FriendlyName("Proveedor", true)]
        [DBField("IDPROVEEDOR", false, false, true, "IDPROVEEDOR")]
        public Proveedor Proveedor
        {
            get { return objProveedor; }
            set { objProveedor = value; }
        }

        [FriendlyName("Fecha", false)]
        [DBField("FECHA", false, false)]
        public DateTime Fecha
        {
            get { return fecha; }
            set { fecha = value; }
        }

        [FriendlyName("Fecha", true)]
        public string FechaString
        {
            get { return fecha.ToShortDateString(); }
        }

        [FriendlyName("Moneda", true)]
        [DBField("IDTIPOMONEDA", false, false, true, "IDTIPOMONEDA")]
        public TipoMoneda TipoMoneda
        {
            get { return objTipoMoneda; }
            set { objTipoMoneda = value; }
        }

        [FriendlyName("Monto", true)]
        [DBField("MONTO", false, false)]
        public decimal Monto
        {
            get { return monto; }
            set { monto = value; }
        }

        [FriendlyName("Estado", true)]
        [DBField("IDTIPOESTADOPEDIDOPROVEEDOR", false, false, true, "IDTIPOESTADOPEDIDOPROVEEDOR")]
        public TipoEstadoPedidoProveedor TipoEstadoPedidoProveedor
        {
            get { return objTipoEstado; }
            set { objTipoEstado = value; }
        }

        [FriendlyName("Empleado", false)]
        [DBField("IDEMPLEADO", false, false, true, "IDEMPLEADO")]
        public Empleado Empleado
        {
            get { return objEmpleado; }
            set { objEmpleado = value; }
        }

        [DBFieldDetail("IDPEDIDOPROVEEDOR", typeof(ItemDetallePedidoProveedor))]
        public DetallePedidoProveedor DetallePedidoProveedor
        {
            get { return objDetallePedidoProveedor; }
            set { objDetallePedidoProveedor = value; }
        }

        public override string ToString()
        {
            return this.IdPedidoProveedor.ToString();
        }

        /// <summary>
        /// Cambia el estado del pedido a Recibido si se han recibido todos los detalles
        /// </summary>
        /// <returns>True si no se produjeron errores</returns>
        public bool SetState()
        {
            bool bandera = true;
            foreach (ItemDetallePedidoProveedor objItem in this.DetallePedidoProveedor.ItemList)
            {
                if (objItem.Cantidad != objItem.CantidadRecibida)
                {
                    bandera = false;
                    break;
                }
            }
            if (bandera)
            {
                try
                {
                    object[] colData = new object[2];
                    colData[0] = "5";
                    colData[1] = this.IdPedidoProveedor;
                    SQL objSql = new SQL();
                    objSql.InitTransaction();
                    objSql.SqlString = "UPDATE PEDIDOSPROVEEDOR SET IDTIPOESTADOPEDIDOPROVEEDOR = ? WHERE IDPEDIDOPROVEEDOR = ?";
                    int res = 0;
                    res = objSql.ExecuteNonQuery(colData);
                    objSql.CommitTransaction();
                    objSql.Close();
                }
                catch (Exception ex)
                {
                    throw new BussinessLogicTecnoPezException(ex.Message);
                }
            }
            return true;
        }
    }
}
